package carmadness.model;

import java.util.List;

/**
 * A járművek útválasztásának általános ősosztálya. Lehetővé teszi a járművek
 * irányításának függetlenítését a konkrét járműszármazékoktól (Police,
 * Civilian, Robber). így rugalmasan készíthető például játékos által irányított
 * Rendőr, vagy gép által irányított Rabló.
 * 
 * @author Metzing Arpad
 * @version 1.0
 * @created 10-Apr-2010 2:32:43 PM
 */
public abstract class Strategy
{

	/**
	 * A legutóbbi irányválasztás értéke.
	 */
	protected float lastDecision;

	public Strategy()
	{

	}

	/**
	 * A konrét implementáció logikája szerint választ a listában kapott irányok
	 * közül.
	 * 
	 * A rendelkezésre álló választható irányokból a konkrét implementáció
	 * logikája szerint (pl. <i>véletlenszerűen</i>, játékos <i>irányítása
	 * alapján</i>) dönt, és visszatér a választott iránnyal.
	 * 
	 * @param angles
	 *            A választható szögek listája.
	 */
	public abstract float decide( List<Float> angles );

	/**
	 * A paraméterként kapott belépési súlyból és a jármű saját súlyából
	 * számítva eldönti, hogy megáll -e. Az alapértelmezett implementáció
	 * szerint csak akkor lép, ha a jármű saját súlya nagyobb, vagy egyenlő,
	 * mint a belépési súly. Ilyenkor a visszatérési érték false.
	 * 
	 * @param entryWeight
	 *            A belépéshez szükséges súly.
	 * @param ownWeight
	 *            A jármű saját súlya.
	 */
	public boolean decideStop( float entryWeight, float ownWeight )
	{
		return ( ownWeight < entryWeight );
	}

}
